import { login, getUserInfo } from '@/api/sys'
//导入设置登录时间的方法 登录的时候调用
import {setTimeStamp} from '@/utils/auth'
import md5 from 'md5'
//导入处理urils 设置本地存储 和获取本地存储的方法
import { setItem, getItem ,removeAllItem} from '@/utils/storage'
import { TOKEN } from '@/constant'
import router from '@/router/index'
export default {
  namespaced: true,
  //vuex仓库
  state: () => ({
    //获取TOKEN如果没有就指定空字符串
    token: getItem(TOKEN) || '',
    userInfo: {}
  }),
  //修改数据的方法
  mutations: {
    //设置token
    setToken(state, token) {
      state.token = token
      //设置本地存储 
      setItem(TOKEN, token)
    },
    //设置用户信息
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo
    }
  },
  actions: {
    /**
     * 登录请求动作
     */
    login(context, userInfo) {
      const { username, password } = userInfo
      return new Promise((resolve, reject) => {
        login({
          username,
          //使用md5加密
          password: md5(password)
        })
          .then(data => {
            console.log(data);
            //带哦用mutations中的setToken方法 设置token
            this.commit('user/setToken', data.token)
            //保存登录时间 保存到本地存储中
            setTimeStamp()
            //登录成功之后跳转页面
            router.push('/')
            resolve()
          })
          .catch(err => {
            reject(err)
          })
      })
    },

    /**
     * 获取用户信息
     */
    async getUserInfo(context) {
      //获取用户信息请求
      const res = await getUserInfo()
      console.log('查看用户信息',res);
      //保存到vuex中
      this.commit('user/setUserInfo',res)
      return res
    },

    /**
     * 退出登录请求
     */

    logout(){
      //调用mutations 中的setToken方法并传递空字符串过去
      this.commit('user/setToken','')
      //调用mutations 中的setUserInfo方法并传递空对象过去
      this.commit('/user/setUserInfo',{})
      //清除本地存储数据
      removeAllItem()
      //清理权限相关配置
      //返回登录页面
      router.push('/login')
    }
  }
}
